package immutable.factors;

import annotation.ThreadSafe;

import java.math.BigInteger;

@ThreadSafe
public class VolatileCachedFactorize {

    /**
     * 安全的发布一个不可变对象
     * 在静态初始化函数中初始化一个对象引用
     * 将对象的引用保存到valatile类型的域或者AtomicReferance对象中
     * 将对象的引用保存到某个正确构造对象的final类型域中
     * 将对象的引用保存到一个由锁保护的域中 HashTbale ConcurrentMap 中
     */
    private volatile OneValueCache cache = new OneValueCache(null,null);

    public BigInteger[] service(BigInteger i){
        BigInteger[] factors = cache.getFactors(i);
        if(factors == null){
            factors = factor(i);
            cache = new OneValueCache(i,factors);
        }
        return factors;
    }

    //此处计算 因式分解
    private BigInteger[] factor(BigInteger i) {
        return new BigInteger[1];
    }
}
